<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="tehNV" id="tehNV"><span data-lake-id="u629b6c4d" id="u629b6c4d">典型回答</span></h1>
  <p data-lake-id="ubae355f9" id="ubae355f9"><br></p>
  <p data-lake-id="u90fbac73" id="u90fbac73"><span data-lake-id="u4ae8eb87" id="u4ae8eb87">在Java 8中, 新增加了一个新的类: CompletableFuture，它提供了非常强大的Future的扩展功能，可以帮助我们简化异步编程的复杂性，提供了函数式编程的能力，可以通过回调的方式处理计算结果，并且提供了转换和组合CompletableFuture的方法。 </span></p>
  <p data-lake-id="u70dd371d" id="u70dd371d"><span data-lake-id="ud912f7e9" id="ud912f7e9">​</span><br></p>
  <p data-lake-id="u4f4ad822" id="u4f4ad822"><span data-lake-id="u96875068" id="u96875068">CompletableFuture类实现了Future接口，所以你还是可以像以前一样通过get方法阻塞或者轮询的方式获得结果，但是这种方式不推荐使用。 CompletableFuture和FutureTask同属于Future接口的实现类，都可以获取线程的执行结果。</span></p>
  <p data-lake-id="u477dd120" id="u477dd120"><span data-lake-id="u271ab3d2" id="u271ab3d2">​</span><br></p>
  <p data-lake-id="u7792d52f" id="u7792d52f"><span data-lake-id="u68fb94c7" id="u68fb94c7">借助CompletableFuture就能实现对多线程进行编排。</span></p>
  <p data-lake-id="u29288a5b" id="u29288a5b"><span data-lake-id="u76ccd830" id="u76ccd830">​</span><br></p>
  <p data-lake-id="u70cc282f" id="u70cc282f"><br></p>
  <p data-lake-id="ub5ecd7d2" id="ub5ecd7d2"><span data-lake-id="u5b2df79a" id="u5b2df79a">关于CompletableFuture的具体用法，大家可以参考：</span><a href="https://juejin.cn/post/7140244126679138312" target="_blank" data-lake-id="u4f02ff78" id="u4f02ff78"><span data-lake-id="uc17c027d" id="uc17c027d">https://juejin.cn/post/7140244126679138312</span></a><span data-lake-id="u582a9f46" id="u582a9f46"> 这篇介绍的挺全的。</span></p>
 </body>
</html>